#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <functional>
#include <vector>
#include<sys/wait.h>
int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        sleep(2);
        printf("hello world\n");
        printf("hello world\n");
        printf("hello world\n");
        printf("hello world\n");
        printf("hello world\n");
        printf("hello world\n");
        int a = 10;
        a/=0;
        printf("hello world\n");
        exit(1);
    }
    int status = 0;
    waitpid(id, &status,0);
    printf("signal: %d,exit code: %d, code dump :%d\n",
            (status&0x7f),(status >> 8)&0xff,(status>>7)&0x1);
    return 0;
}
// struct tast_struct
// {
//     pid_t id;
//     int count = 10; // 时间片，本质就是一个计数器
//     void (*code)();
// };
// std::vector<tast_struct> task_list;
// int timestamp = 0;
// /////////////func///////////////////
// using func_t = std::function<void()>;
// std::vector<func_t> funcs;
// void MemManfer()
// {
//     std::cout << "这是一个内存管理函数" << std::endl;
// }
// void Fflush()
// {
//     std::cout << "这是一个刷新缓冲区的函数" << std::endl;
// }
// // void Sched()
// // {
// //     std::cout<<"这是一个进程调度函数"<<std::endl;
// //     t.count--;
// //     if(t.count <= 0)
// //     {
// //         //切换其他进程
// //     }

// // }
// //////////////////////////////////
// void handlerSig(int sig)
// {
//     timestamp++;
//     std::cout << "######################################" << std::endl;
//     for (auto f : funcs)
//     {
//         f();
//     }
//     std::cout << "######################################" << std::endl;
//     int n = alarm(1);
// }
// void PrintPending(sigset_t &pending)
// {
//     printf("我是一个进程，我的pid：%d\n",getpid());
//     for (int signo = 31; signo >= 1; signo--)
//     {
//         if (sigismember(&pending, signo))
//         {
//             std::cout << "1";
//         }
//         else
//         {
//             std::cout << "0";
//         }
//     }
// }
// void handler(int sig)
// {
//     std::cout << "################"<<std::endl;
//     std::cout<<"递达"<<sig<<"信号"<<std::endl;
//     std::cout<<"#################"<<std::endl;
// }
// int main()
// {

//     sigset_t new_mask, old_mask;
//     sigemptyset(&new_mask);
//     sigaddset(&new_mask, SIGINT);
//     sigaddset(&new_mask, SIGRTMIN + 6);
//     if (sigprocmask(SIG_BLOCK, &new_mask, &old_mask) == -1)
//     {
//         perror("sigprocmask");
//         return 1;
//     }
//     while (true)
//     {
//         sigset_t pending;
//         int m = sigpending(&pending);
//         PrintPending(pending);
//         sleep(1);
//     }

//     // 打印
//     return 0;
// }

// for(int i = 1;i < 32 ;i++)
// {
//     signal(i,handlerSig);
// }
// for(int i = 1;i < 32 ;i++)
// {
//     sleep(1);
//     if(i == 9 || i == 19)continue;
//     raise(i);
// }
// signal(SIGINT,handlerSig);

// signal(2,handlerSig);
//  struct sigaction newact = {0};
//  //newact
//  newact.sa_handler = handlerSig;

// sigemptyset(&newact.sa_mask);
// newact.sa_flags = 0;
// if(sigaction(SIGINT,&newact,NULL)== -1)
// {
//     perror("sigaction");
//     return 1;
// }

// int cnt = 0;
// while(1)
// {
//     std::cout << "hello world," <<cnt++ <<",pid:"<<getpid()<< std::endl;
//     //abort();
//     sleep(1);
// }
//     signal(SIGALRM,handlerSig);
//    alarm(1);
//    int cnt =0;
//    while(1)
//    {
//     //std::cout<<"cnt:"<<cnt<<std::endl;
//     cnt++;
//    }
// void handlerSig(int sig)
// {
//     std::cout<< "获得了一个信号:" << sig <<"pid:"<<getpid()<<std::endl;
//     int n = alarm(1);
//     //exit(12);
// }

// tast_struct task;
// signal(SIGALRM,handlerSig);
// alarm(1);
// while(true)
// {
//     pause();
// }